/**
 * 
 */
package com.proyecto.histoclin.modelo.servicios;

import org.hibernate.exception.ConstraintViolationException;

import com.proyecto.aiepi.modelo.dto.CorrelativosAiepisId;
import com.proyecto.aiepi.modelo.servicios.ServicioCorrelativosAiepis;
import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.ServicioGenerico;
import com.proyecto.histoclin.modelo.constantes.ConstantesHistoriasClinicas;
import com.proyecto.histoclin.modelo.dto.HistoclinTratamientosSeleccion;

/**
 * @author vico
 *
 */
public class ServicioHistoclinTratamientosSeleccion extends ServicioGenerico {

	/**
	 * 
	 */

	ServicioCorrelativosAiepis servicioCorrelativosAiepis;
	
	public ServicioHistoclinTratamientosSeleccion() {
		// TODO Auto-generated constructor stub
	}

	
	@Override
	public void incluir(Object pojo, boolean iniciaTransaccion) throws GeneralException {
		// TODO Auto-generated method stub
		//super.incluir(pojo, iniciaTransaccion);
		
		HistoclinTratamientosSeleccion objHistoclinTratamientosSeleccion = (HistoclinTratamientosSeleccion)pojo;

		if (isValidacionActiva()){
			validacion.incluir(objHistoclinTratamientosSeleccion);
		}
		
		
		try {
			
			String proxNumero = servicioCorrelativosAiepis.obtenerProximoNumeroComoString(
					new CorrelativosAiepisId (objHistoclinTratamientosSeleccion.getId().getCiaopr(), "HCTRASEL","hctraselcod" ) ,true);

			objHistoclinTratamientosSeleccion.getId().setHctraselcod( Integer.parseInt(proxNumero) );
		
			super.incluir(objHistoclinTratamientosSeleccion, iniciaTransaccion);
			
			
		} catch (org.springframework.dao.DataIntegrityViolationException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.PropertyValueException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.datoRequeridoVacio");
			} else if (e.getMostSpecificCause() instanceof ConstraintViolationException) {
				throw new GeneralException(
						"advertencia." + claveProperties + ".incluir.registroDuplicado");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");

		} catch (org.springframework.dao.DataAccessResourceFailureException e) {
			
			if (e.getMostSpecificCause() instanceof org.hibernate.exception.JDBCConnectionException) {
				throw new GeneralException(
						"error." + claveProperties + ".conexion");
			}
			throw new GeneralException("error." + claveProperties + ".incluir");
		} catch (Exception e) {
			System.err.println(":::ServicioHistoriasClinicas::: " + e.getMessage());
			if("advertencia.HistoriasClinicas.datosBasicos.HistoriasClinicas.modificar.BloqueoOptimista".equals(e.getMessage())){
				throw new GeneralException(	e.getMessage());
			}else{
				throw new GeneralException(
						"error." + claveProperties + ".desconocido");
			}
		}
		
	}

	public void eliminandoHistoclinTratamientos_conSeleccion(
			String ciaopr, Integer hisclicod, Integer nropersona, String Tratamientotipocod, Integer datoTratamiento){


		String query,querySub = null;
		if( Tratamientotipocod == null ) {
			querySub = "";
		}else{
			if( Tratamientotipocod.equals(ConstantesHistoriasClinicas.CLASIFICACION_RAYOSX) ) {
				if(datoTratamiento ==null){
					querySub = "";
				}else{
					querySub = " AND HTS.rayoxcod = " + datoTratamiento ;
				}
			}else if(Tratamientotipocod.equals(ConstantesHistoriasClinicas.CLASIFICACION_PARACLINICO)) {
				if(datoTratamiento ==null){
					querySub = "";
				}else{
					querySub = " AND HTS.paraclincod = " + datoTratamiento ;
				}
			}else if(Tratamientotipocod.equals(ConstantesHistoriasClinicas.CLASIFICACION_PROCEDIMIENTO)) {
				if(datoTratamiento ==null){
					querySub = "";
				}else{
					querySub = " AND HTS.procedimcod = " + datoTratamiento ;
				}
			}else if(Tratamientotipocod.equals(ConstantesHistoriasClinicas.CLASIFICACION_REMISION)) {
				if(datoTratamiento ==null){
					querySub = "";
				}else{
					querySub = " AND HTS.remicioncod = " + datoTratamiento ;
				}
			}else if(Tratamientotipocod.equals(ConstantesHistoriasClinicas.CLASIFICACION_MEDICAMENTOS)) {
				if(datoTratamiento ==null){
					querySub = "";
				}else{
					querySub = " AND HRS.id.recetariocod = " + datoTratamiento ;
				}

			}else{
				querySub = "";
			}
		}
		

		query = "DELETE from HistoclinTratamientosSeleccion AS HTS " +
					"WHERE HTS.id.ciaopr = '" + ciaopr + "' " +
						" AND HTS.id.hisclicod = " + hisclicod +
						" AND HTS.nropersona = " + nropersona + querySub;
		
		System.out.println("eliminandoHistoclinTratamientos_conSeleccion: " + query);
		try {
				super.ejecutarQueryDMLk(query, null);
		} catch (Exception e) {
				e.printStackTrace();
				System.out.println("ERROR.eliminandoHistoclinRecetarioSeleccion: " + e.getMessage());
		}
	}

	public ServicioCorrelativosAiepis getServicioCorrelativosAiepis() {
		return servicioCorrelativosAiepis;
	}

	public void setServicioCorrelativosAiepis(
			ServicioCorrelativosAiepis servicioCorrelativosAiepis) {
		this.servicioCorrelativosAiepis = servicioCorrelativosAiepis;
	}
	
}
